//
//  UITextView+Extension.swift
//  表情键盘的搭建
//
//  Created by 陈乾 on 15/11/6.
//  Copyright © 2015年 陈乾. All rights reserved.
//   延展： 封装了插入图片的函数 和获取网络传输字符串的函数

import UIKit

extension UITextView {
    
    //MARK: - xx表情图片
    ///插入表情图片
    func insertEmoticon(emoticon:CQEmoticon) {
        
        //删除表情图片
        if emoticon.removeEmoticon {
        
            deleteBackward()
        }
        
        
        
        //如果是emoji表情
        if let emoji = emoticon.emoji {
            
            insertText(emoji)
        }
        //如果是图片表情
        if let pngPath = emoticon.pngPath {
            
            //创建自定义的附件
            let attach = CQTextAttachment()
            //创建图片
            let image = UIImage(contentsOfFile: pngPath)
            //给图片名称赋值
            let name = emoticon.chs
            
            
            //把图片给附件
            attach.image = image
            attach.name = name
            
            //获取font的高度
            let height = font?.lineHeight ?? 15
            
            //设置附件的大小
            attach.bounds = CGRect(x: 0, y: -(height*0.28), width: height, height: height)
            
            
            
            //创建可变属性文本 把附件添加进去
            let attributeStr = NSMutableAttributedString(attributedString: NSAttributedString(attachment: attach))
            // 发现在表情图片后面在添加表情会很小.原因是前面的这个表请缺少font属性
            // 给属性文本(附件) 添加 font属性
            attributeStr.addAttribute(NSFontAttributeName, value: font!, range: NSRange(location: 0, length: 1))
            // 获取到已有的文本,将表情添加到已有文本里面
            let oldAttributeStr = NSMutableAttributedString(attributedString: attributedText)
            // 记录选中的范围
            let oldRange = selectedRange
            // range: 用新的替换的选中范围的老的
            oldAttributeStr.replaceCharactersInRange(oldRange, withAttributedString: attributeStr)
            // 赋值给textView的 attributedText (因为老的选中范围的被我们用新的替换了 --老的就变成最新的了)
            attributedText = oldAttributeStr
            //设置光标的位子
            selectedRange = NSRange(location: oldRange.location+1, length: 0)
            
            //因为输入图片表情 不会调用代理和通知 使发送按钮可用，placeHolder消失
            //手动调用掉了
            delegate?.textViewDidChange!(self)
            //手动调用通知
            NSNotificationCenter.defaultCenter().postNotificationName(UITextViewTextDidChangeNotification, object: self)
            
            
            
        }
        
        
        
        
    }
    
    ///获取表情字符串 
    func geteEmoticonText() ->String{
        
        //用来拼接的字符串
        var strM = ""
        

        attributedText.enumerateAttributesInRange(NSRange(location: 0, length: attributedText.length), options: NSAttributedStringEnumerationOptions(rawValue: 0), usingBlock: { (dic, range, _) -> Void in
            
            // 判断是否是附件
            if let attachment = dic["NSAttachment"] as? CQTextAttachment {
                strM += attachment.name!
            } else {
                // 不是附件,截取对应的文本
                let str = (self.attributedText.string as NSString).substringWithRange(range)
                strM += str
            }
        })
        
        
        return strM
    }
    
    
    /*end*/
}
